#include <iostream>
using namespace std;

class MyClass
{
public:
    int value;

    // 带参数的构造函数
    MyClass(int c, int a = 2, int num = 0)
    {
        cout << "带参数的构造函数被调用" << a  <<  num << endl;
        value = num;
    }
    // 复制构造函数
    MyClass(const MyClass &obj)
    {
        cout << "复制构造函数被调用" << endl;
        value = obj.value;
    }
};

// 返回类A对象的函数
MyClass func()
{
    MyClass obj(10); // 调用带参数的构造函数创建对象
    return obj;      // 返回对象，触发复制构造函数
}

int func1(MyClass a)
{
    return a.value;      // 返回对象，触发复制构造函数
}
int func2(MyClass &a)
{
    return a.value;      // 返回对象，触发复制构造函数
}

int main()
{
    func(); // 调用函数并将返回值赋给result对象
    cout << "-------------------" << endl;

    MyClass result = func(); // 调用函数并将返回值赋给result对象
    cout << "result.value: " << result.value << endl;
    cout << "-------------------" << endl;
    func1(result);
    cout << "-------------------" << endl;
    cout << "-------------------" << endl;
    func2(result);
    cout << "-------------------" << endl;
    return 0;
}